package _220313;

/**
 * @author ShadowLim
 * @create 2022-03-13-9:08
 */


public class _巧排扑克牌 {
    /** A，2，....J，Q，K --> 1，2，....11，12，13
     * 思路： 从左到右遍历数组 第二个有效位置既可以加入数字
     * 比如当前数组为： 0 1 0 2 （假设要求得到1234的翻牌结果）
     * 接下来要填入的是3 当前指针在数组最后一个位置 需要从头开始遍历
     * 第一个位置为0 标记为一次有效位置 接下来遍历到第二个位置1 非有效位置
     * 继续遍历 第三个位置为0 记为第二次有效位置 则填入数字3
     * 按照这个规律 填满数组即可 最后即是 4132
     *
     * @param args
     */

    public static void main(String[] args) {
        String ans = "";
        boolean flag = false;
        int cnt = 1;
        int idx = 0;
        int[] num = new int[13];

        while (cnt < 13) {
            //  已经出现过一次有效位置 且当前为第二次有效位置
            if (flag && num[idx] == 0) {
                num[idx] = cnt;
                cnt++;
                flag = false;
            } else if (num[idx] == 0) { // 当前为有效位置 则标记
                flag = true;
            }
            idx++;
            idx %= 13;  // 到达数组最后一个位置要循环遍历
        }

        for (int x : num) {
            if (x == 1) {
//                System.out.print("A,");
                ans += "A,";
            } else if (x == 11) {
//                System.out.print("J,");
                ans += "J,";
            } else if (x == 12) {
//                System.out.print("Q,");
                ans += "Q,";
            } else if (x == 13) {
//                System.out.print("K,");
                ans += "K,";
            } else {
//                System.out.print(x + ",");
                ans += String.valueOf(x) + ",";
            }
        }
        System.out.println(ans.substring(0, ans.length() - 1));
    }

/**
 *  不正确
 */
//    private static String ans;
//    public static void main(String[] args) {
//        card();
//    }
//
//    private static void card() {
//        int[] num = {1,2,3,4,5,6,7,8,9,10,11,12,13};
//        boolean flag = false;   // 表示是否取出牌
//        int[] middle = new int[13]; // 建立中间数据保存牌经过处理后的位置变化
//        int[] lastResult = new int[13];
//        int idx = 0;
//        int cnt = 0;
//
//        while (cnt < 13) {
//            // 若flag为true且当前位的数不为0 则取出并置为0
//            // 若flag为false 则跳过并置为true
//            if (flag && num[idx] != 0) {
//                middle[cnt] = num[idx];
//                num[idx] = 0;
//                cnt++;
//                flag = false;
//            } else if (num[idx] != 0) {
//                flag = true;
//            }
//            idx++;
//            if (idx >= 13) {
//                idx -= 13;
//            }
//            // 由于数组middle保存了牌变化后的位置 把A到K放到它对应的位置 即可得到结果
//            for (int i = 0; i < 13; i++) {
//                int k = middle[i] - 1;
//                lastResult[k] = i + 1;
//            }
//            play(lastResult);
//        }
//    }
//
//    private static void play(int[] num) {
//        for (int i = 0; i < 13; i++) {
//            int x = num[i];
//            switch (x) {
//                case 1 :
//                    ans += "A,";
//                    break;
//                case 11:
//                    ans += "J,";
//                    break;
//                case 12:
//                    ans += "Q,";
//                    break;
//                case 13:
//                    ans += "K,";
//                    break;
//                default:
//                    ans += String.valueOf(x) + ",";
//                    break;
//            }
//        }
//    }
}
